這篇文章會著重在透過 Docker 建置 Concourse 環境上,筆者認為目前 Docker 非常適合用在這類型的應用環境,因此針對 Docker 的部分另外做討論。
要使用 Docker 需要先有 Docker 環境,目前在 Windows 和 Mac 使用官方提供的安裝檔會比較容易。
首先,到官方的下載頁面下載對應系統的安裝程式。
在 Mac 上只需要像一般安裝軟體一樣拖曳到 Applications
目錄後,啟動 Docker 進行初始化後就可以使用。
而 Windows 部分則需要依照安裝程式指示一步步完成安裝即可。
在 Linux 上 Docker 只能運行於 64 位元的作業系統,並且需要 Linux 3.10 以上的核心版本。
uname -r
我們可以透過 uname
指令來確認 Linux 的核心版本。
目前大部分主流的發行版本(Ubuntu / Fedora 等)都有提供套件可以直接安裝,後面會以 Ubuntu 為例子。
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
先對套件做更新,並且安裝新增 Docker 套件來源必要的套件。
sudo apt-key adv \
--keyserver hkp://ha.pool.sks-keyservers.net:80 \
--recv-keys 58118E89F3A912897C070ADBF76221572C52609D
接著使用 apt-key
指令將 Docker 的 GPG Key 新增進去,讓 Ubuntu 可以信任來自 Docker 的套件。
官方的安裝指南會列出 Ubuntu 對應版本的套件伺服器,以 Ubuntu 14.04 來說就是 deb https://apt.dockerproject.org/repo ubuntu-trusty main
這行網址,我們透過新增套件來源檔案來增加套件。
echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
完成上述步驟後,執行 apt-cache
檢查是否已經可以找到正確的 Docker 套件。
apt-cache policy docker-engine
如果是正確取的的話,應該會看到 docker-engine
的套件,版本大約是 1.12
左右,有些系統還能找到舊版的 docker
套件,安裝時別安裝錯了。
在 Ubuntu 14.04 之後不需要做太多額外的處理,只需要安裝一些 Linux 核心的擴充就可以使用 Docker 。
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
執行完上述的指令後,就可以來安裝 Docker 了!
sudo apt-get install docker-engine
完成後,用 service
指令啟動 Docker 讓 Docker 可以運作。
sudo service docker start
已架設網站來說,通常會需要網頁伺服器、資料庫等等服務,透過 Docker 管理並不是那麼方便的。使用 Docker Compose 可以統一的撰寫設定,一次性的設置完伺服器。
而 Concourse 也提供 Docker Compose 設定檔,讓我們可以快速建置 Concourse 的環境。
在前面的步驟我們使用了 Docker Native 的方式安裝,實際上系統已經裝好 Docker Compose 了,不需要另外做任何事情就可以使用 Docker Compose。
Docker Compose 基本上只是一個單一執行檔,因此將其下載下來後放到 Linux 上的執行檔目錄即可使用。
curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
目前 Docker Compose 的版本為 1.9.0 下載好之後,還要再賦予執行的權限。
chmod +x /usr/local/bin/docker-compose
完成上述指令後,就可以使用 Docker Compose 了!
首先,我們需要一個專案的目錄給 Concourse 使用。
mkdir concourse
然後將 Docker Compose 的設定(docker-compose.yml
)產生,將以下內容放進去。
concourse-db:
image: postgres:9.5
environment:
POSTGRES_DB: concourse
POSTGRES_USER: concourse
POSTGRES_PASSWORD: changeme
PGDATA: /database
concourse-web:
image: concourse/concourse
links: [concourse-db]
command: web
ports: ["8080:8080"]
volumes: ["./keys/web:/concourse-keys"]
environment:
CONCOURSE_BASIC_AUTH_USERNAME: concourse
CONCOURSE_BASIC_AUTH_PASSWORD: changeme
CONCOURSE_EXTERNAL_URL: "${CONCOURSE_EXTERNAL_URL}"
CONCOURSE_POSTGRES_DATA_SOURCE: |-
postgres://concourse:changeme@concourse-db:5432/concourse?sslmode=disable
concourse-worker:
image: concourse/concourse
privileged: true
links: [concourse-web]
command: worker
volumes: ["./keys/worker:/concourse-keys"]
environment:
CONCOURSE_TSA_HOST: concourse-web
如果是要部署在正式的機器上,建議將 POSTGRES_USER
和 POSTGRES_PASSWORD
都更改一下,以增進安全性。
在 Concourse 預設都是使用基本驗證的,所以我們要先將使用者的帳號密碼設定進去。
CONCOURSE_BASIC_AUTH_USERNAME: concourse
CONCOURSE_BASIC_AUTH_PASSWORD: changeme
修改完以上數值後,跟前一篇文章一樣需要產生三個必要的金鑰才行。
mkdir -p keys/web keys/worker
ssh-keygen -t rsa -f ./keys/web/tsa_host_key -N ''
ssh-keygen -t rsa -f ./keys/web/session_signing_key -N ''
ssh-keygen -t rsa -f ./keys/worker/worker_key -N ''
cp ./keys/worker/worker_key.pub ./keys/web/authorized_worker_keys
cp ./keys/web/tsa_host_key.pub ./keys/worker
Docker Compose 設定檔中已經寫好自動對應 Docker 容器的規則,所以我們需要新增一個 keys
目錄以對應設定檔。
當上面的設定都完成後,就可以執行 Docker Compose 的指令啟動伺服器。
docker-compose up
如果想在背景執行的話,可以加上 -d
的選項。
docker-compose up -d
最後打開 http://localhost:8080 看看是否正常啟用,以及能不能用設定的帳號密碼登入吧!
下一篇會介紹 Concourse 的 Fly 命令列工具。